home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Frameworks / TransSkel 3.24 / Interface / TransSkel.h < prev    next >
Text File  |  1996-01-24  |  15KB  |  404 lines

  1. /*
  2.  * prototypes for TransSkel public routines
  3.  *
  4.  * Compiles under:
  5.  *  THINK C 7 or 8.
  6.  *  Metrowerks C 3.0 through 8.0.
  7.  *
  8.  *  Might compile under THINK C 6 with some minor changes.
  9.  *
  10.  * Assumes that compiler understands nested prototypes.
  11.  *
  12.  * THINK C Notes:
  13.  * You must have THINK C Language Extensions turned on in the
  14.  * Edit/Options.../Language Settings dialog (so that the "pascal" keyword
  15.  * is recognized, for one thing).
  16.  *
  17.  * for:            TransSkel 3.24
  18.  * last edit:    24 January 96
  19.  */
  20.  
  21. # ifndef    __TRANSSKEL_H__
  22.  
  23. # define    __TRANSSKEL_H__
  24.  
  25. # define    skelMajorRelease    3
  26. # define    skelMinorRelease    24
  27.  
  28. /*
  29.  * Define symbol as shorthand indicating whether PPC code is being
  30.  * generated.
  31.  */
  32.  
  33. # ifndef skelPPC
  34. # if defined(powerc) || defined(__powerc)
  35. # define    skelPPC    1
  36. # else
  37. # define    skelPPC    0
  38. # endif
  39. # endif
  40.  
  41. /*
  42.  * Define skelUnivHeaders symbol indicating whether or not the universal
  43.  * headers are being used.  If they are, then UniversalProcPtr's and
  44.  * related machinery can be used.  If not, then it's necessary to define
  45.  * compatibility macros for UPP's.
  46.  *
  47.  * If skelUnivHeaders isn't already defined, this fragment figures out
  48.  * whether or not the universal headers are being used.  GENERATINGPOWERPC
  49.  * will be defined if the release 2 headers are in use.  USESROUTINEDESCRIPTORS
  50.  * will be defined if the release 1 headers are in use.  If neither symbol
  51.  * is defined, the universal headers are not being used.  The value of
  52.  * skelUnivHeaders ends up as:
  53.  *  0    No universal headers
  54.  *  1    Universal headers release 1
  55.  *  2    Universal headers release 2
  56.  *
  57.  * skelUnivHeadersMinor is the minor release number.  I'm not sure this matters
  58.  * for release 1, so it's always set to 0.  For release 2, some of the
  59.  * prototypes changed at 2.01 in an incompatible way (e.g., for KeyTranslate())
  60.  * so an attempt is made at defining the minor number. PRAGMA_ALIGN_SUPPORTED
  61.  # seems to have come into existence at 2.01, so that's used as the test.
  62.  *
  63.  * This can be overridden by making sure skelUnivHeaders is either
  64.  * 0, 1, or 2 before TransSkel.h is processed. If you do this, you should
  65.  * also define skelUnivHeadersMinor to the appropriate value.
  66.  */
  67.  
  68. # ifndef    skelUnivHeaders
  69. # ifdef        GENERATINGPOWERPC        /* Universal headers, release 2 */
  70. # define    skelUnivHeaders    2
  71. # ifdef PRAGMA_ALIGN_SUPPORTED
  72. # define    skelUnivHeadersMinor 1    /* minor release .01 */
  73. # else
  74. # define    skelUnivHeadersMinor 0
  75. # endif
  76. # else
  77. # ifdef        USESROUTINEDESCRIPTORS    /* Universal headers, release 1 */
  78. # define    skelUnivHeaders    1
  79. # define    skelUnivHeadersMinor 0
  80. # else                                /* Old Apple headers */
  81. # define    skelUnivHeaders    0
  82. # define    skelUnivHeadersMinor 0
  83. # endif        /* USESROUTINEDESCRIPTORS */
  84. # endif        /* GENERATINGPOWERPC */
  85. # endif        /* skelUnivHeaders */
  86.  
  87.  
  88. /*
  89.  * Compatibility machinery for non-universal header compilation
  90.  *
  91.  * If skelUnivHeaders is 0, then the universal headers aren't available
  92.  * and UPP types won't exist.  Instead the UPP types are typedef'd below
  93.  * to the equivalent non-universal header types.  The types listed here
  94.  * are those needed to UPP-ize parameters or return values of TransSkel
  95.  * interface functions or structure members.
  96.  */
  97.  
  98. # if !skelUnivHeaders
  99.  
  100. typedef    ProcPtr                    UniversalProcPtr;
  101. typedef    GrowZoneProcPtr            GrowZoneUPP;
  102. typedef    ModalFilterProcPtr        ModalFilterUPP;
  103. typedef    ModalFilterYDProcPtr    ModalFilterYDUPP;
  104. typedef    pascal void (*UserItemUPP) (DialogPtr d, short item);
  105.  
  106. # define    NewModalFilterProc(proc)    (ModalFilterUPP)(proc)
  107. # define    NewModalFilterYDProc(proc)    (ModalFilterYDUPP)(proc)
  108.  
  109. # define    DisposeRoutineDescriptor(upp)    /* as nothing */
  110.  
  111. # endif /* !skelUnivHeaders */
  112.  
  113.  
  114. /*
  115.  * Macro for accessing QuickDraw globals (e.g., white, arrow).  Some
  116.  * compilers can access these as white or &qd.white.  Others allow only
  117.  * &qd.white (e.g., Metrowerks), others allow only white (e.g., THINK
  118.  * Pascal).  The default is to use the qd struct.  If you need the non-qd
  119.  * form, you can supply an override definition of:
  120.  *     #define SkelQD(global) global
  121.  * (This is how the THINK Pascal version of the library is created.)
  122.  */
  123.  
  124. # ifndef    SkelQD
  125. # define    SkelQD(global)    (qd.global)
  126. # endif
  127.  
  128.  
  129. /* window property numbers */
  130.  
  131. # define    skelWPropAll            0        /* pseudo-property */
  132. # define    skelWPropModeless        1        /* modeless dialog */
  133. # define    skelWPropModal            2        /* modal dialog */
  134. # define    skelWPropTool            3        /* tool window */
  135. # define    skelWPropMovableModal    4        /* movable modal dialog */
  136. # define    skelWPropHelp            5        /* help window */
  137. # define    skelWPropText            6        /* text window */
  138. # define    skelWPropDisplayWind    7        /* TransDisplay window */
  139. # define    skelWPropEditWind        8        /* TransEdit window */
  140. # define    skelWPropApplBase        256        /* general-use prop num base */
  141.  
  142.  
  143. /* SkelQuery() query selectors */
  144.  
  145. # define    skelQVersion        1            /* TransSkel version */
  146. # define    skelQSysVersion        2            /* System software version */
  147. # define    skelQHasWNE            3            /* whether has WaitNextEvent() */
  148. # define    skelQMBarHeight        4            /* menu bar height */
  149. # define    skelQHas64KROM        5            /* whether has 64K ROM */
  150. # define    skelQHasColorQD        6            /* whether has Color QuickDraw */
  151. # define    skelQInForeground    7            /* whether in foreground */
  152. # define    skelQHasGestalt        8            /* whether has Gestalt() */
  153. # define    skelQHasAppleEvents    9            /* whether has Apple Events */
  154. # define    skelQQDVersion        10            /* QuickDraw version */
  155. # define    skelQGrayRgn        11            /* Desktop region */
  156. # define    skelQHasThreads        12            /* whether has Thread Manager */
  157.  
  158.  
  159. /* window property types */
  160.  
  161. typedef struct SkelWindProperty    SkelWindProperty, **SkelWindPropHandle;
  162.  
  163. struct SkelWindProperty
  164. {
  165.     short                skelWPropType;
  166.     long                skelWPropData;
  167.     SkelWindPropHandle    skelWPropNext;
  168. };
  169.  
  170.  
  171. /*
  172.  * Initialization parameters
  173.  *
  174.  * SkelResumeProcPtr is the same as ResumeProcPtr, but the latter is
  175.  * disappearing from Apple's header files because it's not supposed
  176.  * to be used under System 7 anymore.
  177.  */
  178.  
  179. typedef struct SkelInitParams SkelInitParams, *SkelInitParamsPtr;
  180. typedef pascal void (*SkelResumeProcPtr)(void);
  181.  
  182. struct SkelInitParams
  183. {
  184.     short                skelMoreMasters;
  185.     GrowZoneUPP            skelGzProc;
  186.     SkelResumeProcPtr    skelResumeProc;
  187.     Size                skelStackAdjust;
  188. };
  189.  
  190.  
  191. /*
  192.  * typedefs for pointers to various sorts of functions used by TransSkel
  193.  * routines.
  194.  */
  195.  
  196. typedef pascal void (*SkelIdleProcPtr) (void);
  197. typedef    pascal Boolean (*SkelEventHookProcPtr) (EventRecord *);
  198. typedef pascal void (*SkelSuspendResumeProcPtr) (Boolean inForeground);
  199. typedef pascal void (*SkelClipCvtProcPtr) (Boolean inForeground);
  200. typedef pascal void (*SkelAEHandlerProcPtr) (EventRecord *);
  201.  
  202.  
  203. /* ------------- */
  204. /* Core routines */
  205. /* ------------- */
  206.  
  207. /* initialization/termination routines */
  208.  
  209. pascal void SkelGetInitParams (SkelInitParamsPtr initParams);
  210. pascal void SkelInit (SkelInitParamsPtr initParams);
  211. pascal void SkelCleanup (void);
  212.  
  213. /* event-loop-related routines */
  214.  
  215. pascal void SkelEventLoop (void);
  216. pascal void SkelStopEventLoop (void);
  217. pascal void SkelRouteEvent (EventRecord *evt);
  218. pascal void SkelActivate (WindowPtr w, Boolean active);
  219. pascal void SkelClose (WindowPtr w);
  220. pascal EventRecord *SkelGetCurrentEvent (void);
  221. pascal short SkelGetModifiers (void);
  222. pascal void SkelSetEventMask (short mask);
  223. pascal short SkelGetEventMask (void);
  224. pascal void SkelSetDlogMask (short mask);
  225. pascal short SkelGetDlogMask (void);
  226. pascal void SkelSetIdle (SkelIdleProcPtr p);
  227. pascal SkelIdleProcPtr SkelGetIdle (void);
  228. pascal void SkelSetEventHook (SkelEventHookProcPtr p);
  229. pascal SkelEventHookProcPtr SkelGetEventHook (void);
  230. pascal void SkelSetSuspendResume (SkelSuspendResumeProcPtr p);
  231. pascal SkelSuspendResumeProcPtr SkelGetSuspendResume (void);
  232. pascal void SkelSetClipCvt (SkelClipCvtProcPtr p);
  233. pascal SkelClipCvtProcPtr SkelGetClipCvt (void);
  234. pascal void SkelSetWaitTimes (long fgTime, long bgTime);
  235. pascal void SkelGetWaitTimes (long *pFgTime, long *pBgTime);
  236. pascal void SkelSetThreadTimes (long fgTime, long bgTime);
  237. pascal void SkelGetThreadTimes (long *pFgTime, long *pBgTime);
  238.  
  239. pascal void SkelSetAEHandler (SkelAEHandlerProcPtr p);
  240. pascal SkelAEHandlerProcPtr SkelGetAEHandler (void);
  241.  
  242.  
  243. /* window handling routines */
  244.  
  245. typedef    pascal void (*SkelWindMouseProcPtr) (Point where, long when, short modifiers);
  246. /*
  247.  * Key handler needs special treatment because for prototyped functions
  248.  * (which TransSkel uses), THINK C passes character arguments in the *high*
  249.  * byte of a two-byte stack value.  To make sure the values are passed in the
  250.  * low byte from either C or Pascal key handlers, the first two arguments are
  251.  * passed in shorts.  In Pascal, the key procedure should
  252.  * look like this:
  253.  *     procedure Key (c: char; code: Integer; modifiers: Integer);
  254.  */
  255. typedef    pascal void (*SkelWindKeyProcPtr) (short c, short code, short modifiers);
  256. typedef    pascal void (*SkelWindUpdateProcPtr) (Boolean resized);
  257. typedef    pascal void (*SkelWindActivateProcPtr) (Boolean active);
  258. typedef    pascal void (*SkelWindCloseProcPtr) (void);
  259. typedef    pascal void (*SkelWindClobberProcPtr) (void);
  260. typedef    pascal void (*SkelWindIdleProcPtr) (void);
  261.  
  262. typedef    pascal void (*SkelWindSelectProcPtr) (DialogPtr dlog, short item);
  263.  
  264. typedef    pascal void (*SkelWindZoomProcPtr) (WindowPtr w, short zoomDir);
  265.  
  266. pascal Boolean SkelWindow (WindowPtr w,
  267.                     SkelWindMouseProcPtr doMouse,
  268.                     SkelWindKeyProcPtr doKey,
  269.                     SkelWindUpdateProcPtr doUpdate,
  270.                     SkelWindActivateProcPtr doActivate,
  271.                     SkelWindCloseProcPtr doClose,
  272.                     SkelWindClobberProcPtr doClobber,
  273.                     SkelWindIdleProcPtr doIdle,
  274.                     Boolean idleFrontOnly);
  275. pascal Boolean SkelDialog (DialogPtr dlog,
  276.                     ModalFilterProcPtr doFilter,
  277.                     SkelWindSelectProcPtr doSelect,
  278.                     SkelWindCloseProcPtr doClose,
  279.                     SkelWindClobberProcPtr doClobber);
  280. pascal void SkelRmveWind (WindowPtr w);
  281. pascal void SkelRmveDlog (DialogPtr dlog);
  282. pascal Boolean SkelWindowRegistered (WindowPtr w);
  283. pascal Boolean SkelIsDlog (WindowPtr w);
  284. pascal Boolean SkelIsMMDlog (WindowPtr w);
  285. pascal void SkelSetGrowBounds (WindowPtr w,
  286.                             short hLo, short vLo,
  287.                             short hHi, short vHi);
  288. pascal void SkelSetZoom (WindowPtr w, SkelWindZoomProcPtr pZoom);
  289. pascal SkelWindZoomProcPtr SkelGetZoom (WindowPtr w);
  290. pascal Boolean SkelGetRectDevice (Rect *rp, GDHandle *gd, Rect *devRect, Boolean *isMain);
  291. pascal Boolean SkelGetWindowDevice (WindowPtr w, GDHandle *gd, Rect *devRect);
  292. pascal void SkelGetWindContentRect (WindowPtr w, Rect *rp);
  293. pascal void SkelGetWindStructureRect (WindowPtr w, Rect *rp);
  294. pascal short SkelGetWindTitleHeight (WindowPtr w);
  295.  
  296. pascal Boolean SkelAddWindProp (WindowPtr w, short propType, long propData);
  297. pascal void SkelRmveWindProp (WindowPtr w, short propType);
  298. pascal SkelWindPropHandle SkelGetWindProp (WindowPtr w, short propType);
  299. pascal long SkelGetWindPropData (WindowPtr w, short propType);
  300.  
  301.  
  302. /* menu handling routines */
  303.  
  304. typedef    pascal void (*SkelMenuSelectProcPtr) (short item);
  305. typedef    pascal void (*SkelMenuClobberProcPtr) (MenuHandle m);
  306. typedef pascal void (*SkelMenuHookProcPtr) (void);
  307.  
  308. pascal Boolean SkelMenu (MenuHandle m,
  309.                     SkelMenuSelectProcPtr doSelect,
  310.                     SkelMenuClobberProcPtr doClobber,
  311.                     Boolean subMenu,
  312.                     Boolean drawBar);
  313. pascal void SkelRmveMenu (MenuHandle m);
  314.  
  315. pascal void SkelSetMenuHook (SkelMenuHookProcPtr p);
  316. pascal SkelMenuHookProcPtr SkelGetMenuHook (void);
  317.  
  318.  
  319. /* environment information routines */
  320.  
  321. pascal long SkelQuery (short selector);
  322. pascal Boolean SkelTrapAvailable (short theTrap);
  323. pascal Boolean SkelGestaltCheck (OSType selector, short featureCode);
  324.  
  325.  
  326. /* ------------------ */
  327. /* Auxiliary routines */
  328. /* ------------------ */
  329.  
  330. # define    skelAppleMenuID        128
  331.  
  332. pascal void SkelApple (StringPtr items, SkelMenuSelectProcPtr pSelect);
  333.  
  334. pascal void SkelDoEvents (short mask);
  335. pascal void SkelDoUpdates (void);
  336.  
  337. pascal ModalFilterUPP SkelDlogFilter (ModalFilterUPP filter, Boolean doReturn);
  338. pascal ModalFilterYDUPP SkelDlogFilterYD (ModalFilterYDUPP filter, Boolean doReturn);
  339. pascal void SkelRmveDlogFilter (void);
  340. pascal void SkelDlogDefaultItem (short item);
  341. pascal void SkelDlogCancelItem (short item);
  342. pascal void SkelDlogTracksCursor (Boolean track);
  343.  
  344. pascal Boolean SkelCmdPeriod (EventRecord *evt);
  345.  
  346.  
  347. /* -------------------- */
  348. /* Convenience routines */
  349. /* -------------------- */
  350.  
  351. /* positioning types for SkelGetReferenceRect()/SkelPositionWindow() */
  352.  
  353. # define    skelPositionNone            0    /* leave as is */
  354. # define    skelPositionOnMainDevice    1    /* position on main device */
  355. # define    skelPositionOnParentWindow    2    /* position on FrontWindow() */
  356. # define    skelPositionOnParentDevice    3    /* position on FrontWindow()'s device */
  357.  
  358. pascal void SkelGetMainDeviceRect (Rect *r);
  359. pascal void SkelPositionRect (Rect *refRect, Rect *r, Fixed hRatio, Fixed vRatio);
  360. pascal void SkelGetReferenceRect (Rect *r, short positionType);
  361. pascal void SkelPositionWindow (WindowPtr w, short positionType, Fixed hRatio, Fixed vRatio);
  362. pascal Boolean SkelTestRectVisible (Rect *r);
  363.  
  364. /* alert presentation routines */
  365.  
  366. pascal short SkelAlert (short alrtResNum, ModalFilterUPP filter, short positionType);
  367. pascal void SkelSetAlertPosRatios (Fixed hRatio, Fixed vRatio);
  368. pascal void SkelGetAlertPosRatios (Fixed *hRatio, Fixed *vRatio);
  369.  
  370. /* control manipulation routines */
  371.  
  372. pascal Boolean SkelHiliteControl (ControlHandle ctrl, short hilite);
  373. pascal void SkelDrawButtonOutline (ControlHandle ctrl);
  374. pascal void SkelEraseButtonOutline (ControlHandle ctrl);
  375. pascal void SkelFlashButton (ControlHandle ctrl);
  376. pascal short SkelToggleCtlValue (ControlHandle ctrl);
  377.  
  378. /* dialog item manipulation routines */
  379.  
  380. pascal ControlHandle SkelGetDlogCtl (DialogPtr d, short item);
  381. pascal Boolean SkelSetDlogCtlHilite (DialogPtr d, short item, short hilite);
  382. pascal short SkelGetDlogCtlHilite (DialogPtr d, short item);
  383. pascal void SkelSetDlogCtlValue (DialogPtr d, short item, short value);
  384. pascal short SkelGetDlogCtlValue (DialogPtr d, short item);
  385. pascal short SkelToggleDlogCtlValue (DialogPtr d, short item);
  386. pascal void SkelSetDlogCtlRefCon (DialogPtr d, short item, long value);
  387. pascal long SkelGetDlogCtlRefCon (DialogPtr d, short item);
  388. pascal void SkelSetDlogStr (DialogPtr d, short item, StringPtr str);
  389. pascal void SkelGetDlogStr (DialogPtr d, short item, StringPtr str);
  390. pascal void SkelSetDlogRect (DialogPtr d, short item, Rect *r);
  391. pascal void SkelGetDlogRect (DialogPtr d, short item, Rect *r);
  392. pascal void SkelSetDlogProc (DialogPtr d, short item, UserItemUPP proc);
  393. pascal UserItemUPP SkelGetDlogProc (DialogPtr d, short item);
  394. pascal void SkelSetDlogType (DialogPtr d, short item, short type);
  395. pascal short SkelGetDlogType (DialogPtr d, short item);
  396. pascal void SkelSetDlogRadioButtonSet (DialogPtr dlog, short first, short last, short choice);
  397. pascal void SkelSetDlogButtonOutliner (DialogPtr d, short item);
  398. pascal void SkelSetDlogCursor (DialogPtr d);
  399. pascal Boolean SkelDlogMapKeyToButton (DialogPtr d, EventRecord *evt, short *item,
  400.                                         short defaultItem, short cancelItem);
  401.  
  402. pascal void SkelPause (long ticks);
  403.  
  404. # endif /* __TRANSSKEL_H__ */